﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace 进窑工位采集服务
{
    partial class Service2 : ServiceBase
    {
        private string Manufacture = ConfigurationManager.AppSettings["生产企业"];
        private string IP_出窑 = ConfigurationManager.AppSettings["进窑工控机IP"];
        private string 采集周期 = ConfigurationManager.AppSettings["采集周期"];
        private string 重启路径 = ConfigurationManager.AppSettings["重启路径"];

        ModBus采集类1 _ModBus采集类1;
        进窑工位判断类 _进窑工位判断类;
        数据处理类 _数据处理类;
        SQLite操作类 _SQLite操作类;
        SQL操作类 _SQL操作类;
        错误日记类 _错误日记类;
        重启类 _重启类;
        运行情况 _运行情况;

        public Service2()
        {
            InitializeComponent();
            InitService();
            InitClass();
            InitEvent();
        }



        private void InitClass()
        {
            _ModBus采集类1 = ModBus采集类1.GetInstance(IP_出窑, 采集周期);
            _进窑工位判断类 = new 进窑工位判断类(Manufacture);
            _数据处理类 = new 数据处理类();
            _SQLite操作类 = new SQLite操作类();
            _SQL操作类 = new SQL操作类();
            _错误日记类 = new 错误日记类();
            _运行情况 = new 运行情况();
            _重启类 = new 重启类(重启路径);

        }

        private void InitEvent()
        {
            _ModBus采集类1.重启事件 += _重启类.重启;
            _ModBus采集类1.错误日记事件 += _错误日记类.错误日记执行函数;
            _ModBus采集类1.采集事件 += _进窑工位判断类.工位判断执行类;
            _进窑工位判断类.一号生产线上车事件 += _数据处理类.一号生产线上车事件执行函数;
            _进窑工位判断类.二号生产线上车事件 += _数据处理类.二号生产线上车事件执行函数;
            _进窑工位判断类.进一号窑事件 += _数据处理类.进一号窑事件执行函数;
            _进窑工位判断类.进二号窑事件 += _数据处理类.进二号窑事件执行函数;
            _进窑工位判断类.进三号窑事件 += _数据处理类.进三号窑事件执行函数;
            _进窑工位判断类.保存变化值事件 += _数据处理类.进出窑_变化日记;
            _进窑工位判断类.工位判断错误日记事件 += _错误日记类.错误日记执行函数;
            _数据处理类.插入SQL事件 += _SQL操作类.SQL操作事件执行函数;
            _数据处理类.插入SQLite事件 += _SQLite操作类.SQL操作事件执行函数;
            _数据处理类.插入SQLite错误日记事件 += _错误日记类.错误日记执行函数;
            _数据处理类.插入SQL错误事件 += _错误日记类.错误日记执行函数;
        }

        private void InitService()
        {
            base.AutoLog = false;
            base.CanShutdown = true;
            base.CanStop = true;
            base.CanPauseAndContinue = true;
            base.ServiceName = "进窑工位采集服务";  //这个名字很重要，设置不一致会产生 1083 错误哦(在文章最后会说到这个问题)！
        }

        protected override void OnStart(string[] args)
        {
            _运行情况.insert_into_软件运行情况("开始", "进窑服务启动", Manufacture);

            _ModBus采集类1.IsReadingPlc = true;

            // TODO: 在此处添加代码以启动服务。
        }

        protected override void OnStop()
        {
            _运行情况.insert_into_软件运行情况("停止", "进窑服务停止", Manufacture);

            _ModBus采集类1.IsReadingPlc = false;

            // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
        }
    }
}
